/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package interfaces;
import entidades.Reserva;
import entidades.Cliente;
import erros.ErroCadastramento;
import erros.ErroAtualizacao;
import erros.ErroRecuperacao;
import erros.ErroRemocao;
import java.util.ArrayList;
/**
 * Interface que provê os serviços prestados pela controladora
 * de negócio da entidade Reserva.
 * @author thiagostuckert
 * @author daniel
 */
public interface IGerenciaReserva {
    /**
     * Cadastra uma nova reserva no banco de dados.
     * @param cliente cliente o qual deseja cadastrar reserva.
     * @param reserva Reserva a ser cadastrada.
     * @throws ErroCadastramento Joga uma exceção de erro de castramento.
     */
    public void cadastrarReserva(Cliente cliente,Reserva reserva)
            throws ErroCadastramento;
    /**
     * Recupera uma reserva do banco de dados.
     * @param reserva Reserva a ser recuperada.
     * @return Retorna a reserva do banco com todos os atributos.
     * @throws ErroRecuperacao Lança a exceção de erro de recuperação.
     */
    public Reserva recuperarReserva(Reserva reserva) throws ErroRecuperacao;

    /**
     * Recupera as reservas do cliente da base de dados.
     * @param cliente Cliente que terá as reservas recuperadas.
     * @return Retorna a lista de reservas do cliente.
     * @throws ErroRecuperacao Lança a exceção erro de recuperação.
     */
    public ArrayList<Reserva> recuperarReservas(Cliente cliente)
            throws ErroRecuperacao;

    /**
     * Remove uma reserva do banco de dados
     * @param cliente cliente o qual deseja deletar reserva.
     * @param reserva Reserva a ser removida.
     * @throws ErroRemocao Lança a exceção de erro de remoção.
     */
    public void delReserva(Cliente cliente,Reserva reserva) throws ErroRemocao;

    /**
     * Atualiza uma reserva no banco de dados.
     * @param reserva Reserva a ser atualizada.
     * @param reservaNova Atributos novos da reserva.
     * @throws ErroAtualizacao Lança exceção de erro de atualização.
     */
    public void atualizarReserva(Reserva reserva,
            Reserva reservaNova) throws ErroAtualizacao;
}
